Distributed file systems offer many compelling advantages in establishing high performance computing environments. One example is the ability to easily expand, even at large scale. One example of a scalable distributed file system is a cluster of nodes. Individual nodes among the cluster of nodes each can contain their own processor(s), storage drives, memory and the like. Operating together in a cluster, the nodes can respond to client requests, store data, mirror data, and accomplish all the tasks of a modern file system. In communicating with clients, a distributed file system of nodes can support multiple protocol interactions. For example, some clients may want to communicate using NFS protocols, while other clients may desire SMB protocol exchanges to store/retrieve data, while still other clients may use HDFS. To support multiple clients using multiple protocols, protocol heads can be established on each node that act as a gateway for all clients using the protocol to interact with the file system.
For a node that supports multiple protocols, it may be necessary to provision resources to each of the protocol heads for use in processing transactions requested by the client. For example, a node with three protocol heads may divide resources like memory, processor(s), storage devices, etc. among the three protocol heads evenly. However, as one protocol head serves mores clients or is instructed to perform more operations than other protocol heads, it may be more efficient to dynamically provision resources to the protocol heads based on their dynamic use of the resources. In addition, system tasks such as file system maintenance, data mirroring, backup, and countless other processes may also be competing for resources as well. Thus, there exists a need dynamically tune resource allocation within the nodes of a distributed file system